max_size = 100


class SqStack:
    def __init__(self):
        # 初始化顺序栈
        self.elem = [None] * max_size  # 为顺序栈动态分配一个最大容量为 max_size 的数组空间
        self.top, self.base = 0, 0  # top 和 base 都指向栈底元素在顺序栈中的位置，空栈时两者相同
        self.stack_size = max_size  # stack_size 置为栈的最大容量 max_size

    def push(self, e):
        # 将元素压入栈
        if self.top == self.stack_size:  # 判断栈是否已满
            raise Exception('栈已满')
        self.elem[self.top] = e  # 元素 e 压入栈顶
        self.top += 1  # 栈顶指针加 1

    def pop(self):
        # 将栈顶元素弹出
        if self.top == self.base:
            raise Exception('栈已空')
        self.top -= 1  # 栈顶指针减 1，并返回栈顶元素
        return self.elem[self.top]

    def get_top(self):
        # 返回栈顶元素，但不删除它
        if self.stack_empty():
            raise Exception('栈已空')
        return self.elem[self.top - 1]

    def stack_empty(self):
        # 判断栈是否为空
        return self.top == self.base

    def __len__(self):
        # 栈的长度
        return self.top - self.base


def conversion(n):
    # 对于任意一个非负十进制数，打印输出与其等值的八进制数
    s = SqStack()  # 初始化空栈 s
    if n == 0:  # 如果 n 为 0, 直接输出 0
        print(0)
    else:
        while n:  # 当 n 非零时,循环
            s.push(n % 8)  # 把 n 与 8 求余得到的八进制数压入栈 s
            n = int(n / 8)  # n 更新为 n 与 8 的商
        while not s.stack_empty():  # 当栈 S 非空时，循环
            e = s.pop()  # 弹出栈顶元素 e
            print(e, end='')  # 输出 e


# 修改为二进制转换的提示
if __name__ == "__main__":
    print('8 的二进制为：')  # 修改提示文字为二进制转换
    conversion(8)  # 但是实际执行的仍然是八进制转换逻辑
